package com.app.myApp.service;

import com.app.myApp.dataobject.*;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 * 知识库服务接口
 */
public interface KnowledgeService {

    /**
     * 获取所有系统知识库
     */
    List<SystemKnowledgeBasesDO> getSystemKnowledgeBases();

    /**
     * 根据用户邮箱获取个人知识库
     */
    List<KnowledgeBasesDO> getUserKnowledgeBases(String userEmail);

    /**
     * 创建个人知识库（含文件上传）
     */
    KnowledgeBasesDO createKnowledgeBase(String name, String description, String userEmail, MultipartFile[] files);

    /**
     * 向已有知识库上传文件
     */
    KnowledgeFilesDO uploadFileToKnowledgeBase(String kbId, String userEmail, MultipartFile file);

    /**
     * 根据知识库ID获取文件列表
     */
    List<KnowledgeFilesDO> getFilesByKnowledgeId(String knowledgeId);

    /**
     * 删除知识库中的文件
     */
    boolean deleteFile(String kbId, String fileId, String userEmail);

    /**
     * 删除个人知识库
     */
    boolean deleteKnowledgeBase(String kbId, String userEmail);

    /**
     * 选择知识库关联到机器人
     */
    boolean selectKnowledgeBase(Long robotId, String knowledgeBaseId, boolean isSystem);

    /**
     * 取消机器人关联的知识库
     */
    boolean deselectKnowledgeBase(Long robotId);

    /**
     * 获取机器人当前关联的知识库
     */
    RobotAndKnowledgeBasesDO getSelectedKnowledgeBase(Long robotId);

    /**
     * 创建系统知识库（仅管理员）
     */
    SystemKnowledgeBasesDO createSystemKnowledgeBase(String name, String description, String email, MultipartFile[] files);

    /**
     * 上传文件到系统知识库（仅管理员）
     */
    SystemKnowledgeFilesDO uploadFileToSystemKb(String systemKbId, String email, MultipartFile file);

    /**
     * 删除系统知识库（仅管理员）
     */
    boolean deleteSystemKnowledgeBase(String systemKbId, String email);

    /**
     * 删除系统知识库中的文件（仅管理员）
     */
    boolean deleteSystemKbFile(String systemKbId, String fileId, String email);

    /**
     * 获取系统知识库的文件列表（仅管理员）
     */
    List<SystemKnowledgeFilesDO> getFilesBySystemKbId(String systemKbId);
}
